package com.cty.A_OutOfMemoryError.A_HeapOOM;

import java.util.ArrayList;
import java.util.List;

/**
 * @Auther: cty
 * @Date: 2020/6/26 20:55
 * @Description: Java堆溢出
 * @VM Args: -Xms20m -Xmx20m -XX:+HeapDumpOnOutOfMemoryError
 * 运行时数据区域大小设置参数总结：
 *      Java堆：
 *          -Xms20m    Java堆最小20M（单位不区分大小写）
 *          -Xmx20m    Java堆最大20M
 *          -Xmn10m    Java堆中新生代（包括Eden区和两个Survivor区）为10M
 *          -XX:SurvivorRatio=8    设置Eden:Survivor=8:1，默认值也为8
 *          -XX:PretenureSizeThreshold=3145728    设置直接晋升到老年代的对象大小为3M（注意不能直接写为3m）
 *          -XX:MaxTenureThreshold=15    设置对象经历15次Minor GC后就进入老年代
 *      Java虚拟机栈：
 *          -Xss128k    Java虚拟机栈大小为128K
 *      本地方法栈：
 *          -Xoss128k    本地方法栈大小为128K
 *      方法区（非堆）：
 *          -XX:PermSize=10m    方法区最小10M
 *          -XX:MaxPermSize=10m    方法区最大10M
 *      直接内存：
 *          -XX:MaxDirectMemorySize=20m    直接内存大小为20M，若不设置默认与-Xmx一样
 * @version: 1.0
 */
public class HeapOOM {
    static class OOMObject{
    }

    public static void main(String[] args) {
        List<OOMObject> list = new ArrayList<>();

        while(true)
            list.add(new OOMObject());

    }  // end main()

}  // end HeapOOM

/**
 * E:\java\jdk1.7.0_71\bin\java.exe -Xms20m -Xmx20m -XX:+HeapDumpOnOutOfMemoryError "-javaagent:E:\Program Files\JetBrains\IntelliJ IDEA 2019.3\lib\idea_rt.jar=12547:E:\Program Files\JetBrains\IntelliJ IDEA 2019.3\bin" -Dfile.encoding=UTF-8 -classpath E:\java\jdk1.7.0_71\jre\lib\charsets.jar;E:\java\jdk1.7.0_71\jre\lib\deploy.jar;E:\java\jdk1.7.0_71\jre\lib\ext\access-bridge-32.jar;E:\java\jdk1.7.0_71\jre\lib\ext\dnsns.jar;E:\java\jdk1.7.0_71\jre\lib\ext\jaccess.jar;E:\java\jdk1.7.0_71\jre\lib\ext\localedata.jar;E:\java\jdk1.7.0_71\jre\lib\ext\sunec.jar;E:\java\jdk1.7.0_71\jre\lib\ext\sunjce_provider.jar;E:\java\jdk1.7.0_71\jre\lib\ext\sunmscapi.jar;E:\java\jdk1.7.0_71\jre\lib\ext\sunpkcs11.jar;E:\java\jdk1.7.0_71\jre\lib\ext\zipfs.jar;E:\java\jdk1.7.0_71\jre\lib\javaws.jar;E:\java\jdk1.7.0_71\jre\lib\jce.jar;E:\java\jdk1.7.0_71\jre\lib\jfr.jar;E:\java\jdk1.7.0_71\jre\lib\jfxrt.jar;E:\java\jdk1.7.0_71\jre\lib\jsse.jar;E:\java\jdk1.7.0_71\jre\lib\management-agent.jar;E:\java\jdk1.7.0_71\jre\lib\plugin.jar;E:\java\jdk1.7.0_71\jre\lib\resources.jar;E:\java\jdk1.7.0_71\jre\lib\rt.jar;E:\JAVAXX\IdeaProjects\JVM\out\production\JVM com.cty.OutOfMemoryError.A_HeapOOM.HeapOOM
 * java.lang.OutOfMemoryError: Java heap space
 * Dumping heap to java_pid4036.hprof ...
 * Heap dump file created [29852891 bytes in 0.330 secs]
 * Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
 * 	at java.util.Arrays.copyOf(Arrays.java:2245)
 * 	at java.util.Arrays.copyOf(Arrays.java:2219)
 * 	at java.util.ArrayList.grow(ArrayList.java:242)
 * 	at java.util.ArrayList.ensureExplicitCapacity(ArrayList.java:216)
 * 	at java.util.ArrayList.ensureCapacityInternal(ArrayList.java:208)
 * 	at java.util.ArrayList.add(ArrayList.java:440)
 * 	at com.cty.OutOfMemoryError.A_HeapOOM.HeapOOM.main(HeapOOM.java:20)
 */
